#ifndef THREAD6_H
#define THREAD6_H

#include <stdint.h>
#include <pthread.h>
#include "log_utils.h"
#include "thread4.h"
#include "thread5.h"

// RS232串口设备定义
#define RS232_DEVICE "/dev/ttyS9"  // RS232-2，对应外部连接器的COM2口
#define RS232_BAUDRATE B9600        // 波特率9600 8-N-1
#define RS232_TIMEOUT_SEC 0        // 接收超时时间（秒）
#define RS232_TIMEOUT_USEC 100000  // 接收超时时间（微秒，100ms）

// 缓冲区大小定义
#define RS232_RX_BUFFER_SIZE 1024  // 接收缓冲区大小
#define RS232_TX_BUFFER_SIZE 8192  // 发送缓冲区大小（扩容以承载完整协议数据）

// 配置文件相关定义
#define DEVICE_CONFIG_FILE "device_config.txt"
#define MAX_DEVICE_ID_LEN 32

// 新增：ASCII主机号后缀长度（默认两位，例如"01"）
#define HOST_ID_ASCII_LEN 2

// 线程6函数声明
void* thread6_function(void* arg);

// 串口初始化函数
int rs232_init(const char *device, int baudrate);

// 串口接收函数，返回实际接收的数据长度
// 参数: fd - 串口文件描述符
//       buffer - 接收缓冲区
//       buffer_size - 缓冲区大小
//       timeout_sec - 超时秒数
//       timeout_usec - 超时微秒数
int rs232_receive(int fd, uint8_t *buffer, int buffer_size, int timeout_sec, int timeout_usec);

// 串口发送函数
// 参数: fd - 串口文件描述符
//       buffer - 发送缓冲区
//       length - 要发送的数据长度
int rs232_send(int fd, const uint8_t *buffer, int length);

// 串口数据处理函数
// 参数: rx_buffer - 接收缓冲区
//       rx_length - 接收数据长度
//       tx_buffer - 发送缓冲区
//       tx_length - 指向发送数据长度的指针，函数会更新此值
void rs232_process_data(const uint8_t *rx_buffer, int rx_length, uint8_t *tx_buffer, int *tx_length);

// 串口关闭函数
void rs232_close(int fd);

// 从配置文件中解析设备ID并提取主机号
// 参数: host_id - 指向存储主机号的32位整型变量的指针
// 返回: 成功返回0，失败返回-1
int parse_device_config_host_id(uint32_t *host_id);

// 获取当前主机号
// 返回: 当前主机号（32位无符号整型）
uint32_t get_thread6_host_id(void);

// 新增：获取ASCII主机号后缀（长度为HOST_ID_ASCII_LEN，结尾\0）
const char* get_thread6_host_id_ascii(void);

// 线程停止函数
void thread6_stop(void);
 
#endif /* THREAD6_H */ 